#include "NezhaRtti.h"

namespace Nezha
{

	Rtti::Rtti(const char* name, const Rtti* base)
		:m_cszName(name), m_cpBase(base)
	{

	}

	Rtti::~Rtti()
	{

	}

	bool Rtti::isDerived(const Rtti& info) const
	{
		const Rtti* p = this;
		while(p)
		{
			if(p == &info)
			{
				return true;
			}
			p = p->m_cpBase;
		}

		return false;
	}

	const Rtti RttiQuery::RunTimeTypeInfo("RttiQuery", NULL);

	bool RttiQuery::isExactly(const Rtti& type) const
	{
		return &getRunTimeTypeInfo() == &type;
	}

	bool RttiQuery::isDerived(const Rtti& type) const
	{
		return getRunTimeTypeInfo().isDerived(type);
	}

	bool RttiQuery::isExactlyTypeOf(const RttiQuery* obj) const
	{
		return obj && (&obj->getRunTimeTypeInfo() == &getRunTimeTypeInfo());
	}

	bool RttiQuery::isDerivedTypeOf(const RttiQuery* obj) const
	{
		return obj && (getRunTimeTypeInfo().isDerived(obj->getRunTimeTypeInfo()));
	}

}//end namespace cute